﻿using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

namespace ImageProcessing.HttpRequest
{
    /// <summary>
    /// Http Request
    /// </summary>
    public interface IHttpRequests
    {
        /// <summary>
        ///  Post Request And RequestHeaders
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Url">Url</param>
        /// <param name="Content">Content</param>
        /// <param name="RequestHeadersDic">RequestHeadersDic</param>
        /// <returns></returns>
        public Task<T> PostAsync<T>(string Url, object Content, Dictionary<string, string> RequestHeadersDic);

        /// <summary>
        /// Post Request
        /// </summary>
        /// <param name="Url">Url</param>
        /// <param name="Content">Content</param>
        /// <returns></returns>
        public Task<Stream> PostAsync<T>(string Url, Dictionary<string, string> Content, byte[] a, byte[] b);

        public Task<T> PostAsync<T>(string Url);

        /// <summary>
        /// Post Request DataCenter
        /// </summary>
        /// <param name="Url">Url</param>
        /// <param name="Content">Content</param>
        /// <returns></returns>
        public Task<T> PostDataCenterAsync<T>(string Url, HttpContent Content);

        /// <summary>
        /// Get Request DataCenter File
        /// </summary>
        /// <param name="Url"></param>
        /// <returns></returns>
        public Task<Stream> GetDataCenterFileAsync(string Url);

        /// <summary>
        /// Get Request DataCenter
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Url"></param>
        /// <returns></returns>
        public Task<T> GetDataCenterAsync<T>(string Url);

        /// <summary>
        /// Get Request
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Url"></param>
        /// <returns></returns>
        public Task<T> GetAsync<T>(string Url);
    }
}